import axios from "axios";
import {getTokeName, messageTip, removeToken} from "../util/util.js";
import {ElMessageBox} from "element-plus";

//定义后端接口地址的前缀
axios.defaults.baseURL = "http://localhost:8089";
export function doGet(url,params) {
    return axios({
        method: "get",
        url: url,
        params: params,
        dataType: "json"
    })
}

export function doPost(url,data) {
    return axios({
        method: "post",
        url: url,
        data: data,
        dataType: "json"
    })
}

export function doPut(url,data) {
    return axios({
        method: "put",
        url: url,
        data: data,
        dataType: "json"
    })
}

export function doDelete(url,params) {
    return axios({
        method: "delete",
        url: url,
        params: params,
        dataType: "json"
    })
}

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么,在请求头中放一个token（jwt）,传给后端接口
    let token = window.sessionStorage.getItem(getTokeName());
    if (!token){//加！表示token没值，表示false
        token = window.localStorage.getItem(getTokeName());
    }
    if (token){
        config.headers['Authorization'] = token;//将token放到请求头的参数中
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么，拦截token验证的结果，进行相应的提示和页面跳转
    if (response.data.code > 900) { //code大于900token验证未通过
        //给前端用户提示，并且跳转页面
        messageConfirm(response.data.msg+"· 是否重新去登录？")
            .then(() => {//用户点确定触发then函数
                //既然后端验证token都不通过了，直接在跳转页面前把这个token删了，没必要再存着带回去浏览器了，造成缓存垃圾
                removeToken();
                //跳转登录页
                window.location.href = "/";
            })
            .catch(() => {//点取消触发catch函数
                messageTip("暂不登录","warning");
            })
        return ;
    }
    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});

//消息确认
export function messageConfirm(msg) {
    return ElMessageBox.confirm(
        msg,//弹出消息的提示语
        '系统提示',
        {
            confirmButtonText: '确定', //确定
            cancelButtonText: '取消',//取消
            type: 'warning',
        }
    )
}